package br.com.empeng.model.persistencia.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;

import br.com.empeng.model.entidades.Produto;
import br.com.empeng.model.persistencia.util.HibernateUtil;

public class ProdutoDao {

	private Session sessao = HibernateUtil.abrirSessao();
	
	public void salvar(Produto produto){
		//Insert into Produto (id, nome, login, senha) values (10,'aaa','bbb','ccc')
		//Update produto set nome='aaa', login='bbb', senha='ccc' where id=10
		sessao.merge(produto);
		sessao.beginTransaction().commit(); //executa
		
	}
	
	public void excluir(Produto produto){
		//ex: Delete from Produto where id=10
		sessao.delete(produto);
		sessao.beginTransaction().commit();
	}
	
	public Produto buscarPorId(Integer id){
		//Ex: Select *  from produto where id=10
		return (Produto)sessao.load(Produto.class, id);
	}
	
	@SuppressWarnings("unchecked")
	public List<Produto> buscarTodos(){
		
		//Selec * from produto
		Criteria criteria = sessao.createCriteria(Produto.class).addOrder(Order.asc("nome"));
		return criteria.list();
		
	}
	
	@SuppressWarnings("unchecked")
	public List<Produto> buscarPorExemplo(Produto produto){
		//Select * from 
		Criteria criteria = sessao.createCriteria(Produto.class).addOrder(Order.asc("nome"));
		
		//Where nome='maria' and login='mar' and senha ='123'
		Example example =  Example.create(produto);
		
		criteria.add(example);
		
		return criteria.list();	
		
	}

}
